/*
 * Parser.h
 *
 *  Created on: 27.11.2009
 *      Author: Sergej Schmidt
 *    Описание: Класс для загрузки присвоений
 *    			пробелы и табуляторы игнорируються
 *    			коментарии пишутьса с помощю  ;  или   #  знака
 */

#ifndef PARSER_H_
#define PARSER_H_
#include <sstream>
#include <iostream>
#include <fstream>
#include <map>
#include <string>
#include <MyGUI.h>
#include "SwsoException.h"

using namespace std;

typedef map<string,string>	ParserMap;

class Parser
{
	ParserMap						m_mapTabelle;
	ParserMap						m_mapTmp;
	ParserMap::iterator				_mapIterator;
	list<string>					m_listFile;
	list<string>::iterator			_listIterator;
	string							m_strFilename;
	bool m_bGeladen;
public:
	Parser(void);
	Parser(Parser* src);
	Parser(string filename);
	virtual ~Parser(void);
	void Load(string file);
	void Save(void);
	void Save(string filename);
	void SaveElement(string element);
	void SaveElements(void);
	bool isGeladen(void) { return m_bGeladen; }
	string 	getString( string element );
	int		getInt(string element);
	void	setValue( string element, string value );
	void	setValue( string element, int value );
	void	setValue( string element, float value );
	void	setValue( string element, size_t value );
	//
	void	SaveTmp(void);
	void	LoadTmp(void);
	// MyGUI методы. хотелось бы не здесь, но так проще
	void 	prepareMyGUI( MyGUI::Gui* gui );
	ParserMap*	getMap() { return &m_mapTabelle; }
	// операторы
	Parser* operator = ( Parser* src);
#ifdef DEBUG
	void Out(void);
#endif
private:
	void IntToString(int i, string& res)
	{
	    ostringstream temp;
	    temp << i;
	    res = temp.str();
	}
	void FloatToString(float f, string& res)
	{
	    ostringstream temp;
	    temp << f;
	    res = temp.str();
	}
	void LoadFileliste(void);
	void SaveFileliste(void);
};
#endif /* PARSER_H_ */
